package cn.phub.basic.listener;

import cn.phub.basic.service.IPermissionScanService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * 自定义权限扫描listener
 * 项目启动结束后，立马执行，扫描 PreAuthorize注解，向permission表中增加权限
 */
@WebListener//申明自定义的web监听器，被容器注册和使用
@Slf4j
public class PermissionScanInitListener implements ServletContextListener {
    @Autowired
    private IPermissionScanService permissionScanService;
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //有可能我们的业务操作很耗时，会造成主进程等待
        //为了避免这种情况，我们需要开异步线程来跑我们的业务，不要影响项目启动
        new Thread(new Runnable() {
            @Override
            public void run() {
                //开启自动扫描权限，加权限-业务抽象
                log.info("扫描权限开始....");
                permissionScanService.scan();
                log.info("扫描权限结束....");
            }
        }).start();
    }
}